package com.woniuxy.util;

import com.nimbusds.jose.*;
import com.nimbusds.jose.crypto.MACSigner;
import com.nimbusds.jose.crypto.MACVerifier;

import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;

/**
 * @author dingpf
 * @version 1.0
 * @description
 * @create 2025/4/22 15:23
 */
public class JWTUtil {

    private static final String secretKey = "天王该地虎，宝塔镇河妖";

    /**
     * 创建jwt
     */
    public static String createJWT(Map userMap) throws JOSEException {
        //1：生成头部
        JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.HS256)
                .type(JOSEObjectType.JWT).build();

        //2: 载荷（保存用户信息）
        Payload payload = new Payload(userMap);

        //3：数字签名 加密 (头部+ 载荷+ 密钥)
        JWSObject jwsObject = new JWSObject(header,payload);

        MACSigner macSigner = new MACSigner(secretKey);
        jwsObject.sign(macSigner); //数字签名（加密）

        return jwsObject.serialize(); //序列化的方式得到jwt字符串
    }

    /**
     * 解密jwt
     */
    public static Boolean decode(String jwt) throws JOSEException, ParseException {
        JWSObject jwsObject = JWSObject.parse(jwt);//反序列化得到对象 字符串-》对象
        MACVerifier macVerifier = new MACVerifier(secretKey);
        return jwsObject.verify(macVerifier); //解密
    }

    /**
     * 获取jwt中用户信息
     * @return
     */
    public static  Map getJWTUserInfo(String jwt) throws ParseException {
        JWSObject jwsObject = JWSObject.parse(jwt);//反序列化得到对象 字符串-》对象
        return jwsObject.getPayload().toJSONObject(); //得到载荷中的用户信息

    }

}
